package be.destin.records;

import be.destin.memolog.UsageLogger;
import be.destin.skos.core.Application;
import be.destin.skos.core.Concept;
import be.destin.skos.core.SchemeInterface;
import be.destin.skos.core.SkosManager;
import be.destin.skos.core.TermList;
import be.destin.util.Util;

public class UsageManager {

	public static void fillUsageLogger(SkosManager skosManager, UsageLogger usage, String url) {
		/*if (url.startsWith("http://localhost/")) {   DIRTY PATCH: NO NO!
			url = url.substring(16);
		}*/
		String aboutNext = skosManager.findSortedApplicationURL(url);
		if (aboutNext == null) {
			usage.setApplication("URL");
			usage.setRecord(url);			
		} else {
			int PSoul = aboutNext.indexOf(SchemeInterface.separator);
			if (PSoul >= 0) {
				String aboutApp = aboutNext.substring(0,PSoul);
				usage.setApplication(aboutApp);
				aboutNext = aboutNext.substring(PSoul+1);
				Concept anAppConcept = skosManager.getApplications().getConcept(aboutApp);
				if (anAppConcept != null && anAppConcept instanceof Application) {
					String record = ((Application)anAppConcept).getInKey(aboutNext);
					if (record == null || record.isEmpty()) { // Record not found in URL suffix, look at the whole one!
						record = ((Application)anAppConcept).getInKey(url);
					}
					usage.setRecord(record);
				} else {
					if (!aboutNext.isEmpty() && aboutNext.charAt(0)=='/') {
						aboutNext = aboutNext.substring(1);
					}
					usage.setRecord(aboutNext);
				}
			} else {
				usage.setApplication("URL");
				usage.setRecord(url);
			}
		}
	}
	
	
/*
 * Est-ce qu'on met ici le code du SENSAR "Wireless Network of Sensors Tracker/Archiver"?
 * Il faut lancer un thread en lui donnant un device séquentiel à lire
 * Il y fait des READ bloquants et à chaque fois qu'il a une ligne complète, il y applique des RegExp les uns après les autres.
 * Quand un réussit, il est supposé avoir extrait les éléments à conserver qui peuvent être:
 * * un nom d'application (normalement toujours le même: HIG)
 * * l'identifiant de l'utilisateur (le code du module qui a envoyé l'information) sous la forme machine_code (le scheme "machine" reste à définir et sera la liste des agents "matériels" du système
 * * le nom de la propriété obtenue (nom de rôle?)
 * * la valeur de cette propriété
 * Si une ligne reçue contient plusieurs informations, on pourra définir des sous-règles pour chacune
 * Si plusieurs lignes doivent être reçues, une action de terminaison spéciale sera permise: "PUSH" qui garde la ligne et attend la suivante pour réessayer sur l'ensemble des lignes finalement reçues
 * L'exploitation du "log" demandera une phase de normalisation (calcul de la température sur base de l'étalonnage de la résistance lue.
 * Ce travail devra être fait à ce moment sur base de paramètres à définir pour chaque 
 */
}